package org.scboy.coobi.db;

import org.scboy.coobi.db.mapping.DataTypeMapping;
import org.scboy.utils.entitys.coobi.DbColumn;
import org.scboy.utils.entitys.coobi.DbIndex;
import org.scboy.utils.entitys.coobi.DbTable;
import org.scboy.utils.entitys.coobi.DbTypeParams;

/**
 * 数据库操作接口
 */
public interface DBStyle {

	/**
	 * 获取数据库类型
	 * @return
	 */
	public String getDb();
	
	/**
	 * Jdbc前缀，用于判断数据库类型
	 * @return
	 */
	public String getJdbc();
	
	
	/**
	 * 获取
	 * @return
	 */
	public String sqlFormat(String sql);
	
	/**
	 * 设置数据库名称
	 * @param dbName
	 */
	public void setDbName(String dbName);
	
	
	/**
	 * 格式化列明
	 * @param name
	 * @return
	 */
	public String getFormatName(String name);
	
	/**
	 * 获取数据库类型
	 * @return
	 */
	public DbTypeParams getDBType(String type);
	
	/**
	 * 获取数据库类型映射
	 * @return
	 */
	public DataTypeMapping getDataTypeMapping();
	
	
	/**
	 * 新增、修改的列格式化
	 * @return
	 */
	public String getCreateOrModifyColumnSql(DbColumn column);
	
	/**
	 * 添加列备注语句
	 * @param column
	 * @return
	 */
	public abstract String getAddColumnCommentSql(String name,DbColumn column);

	/**
	 * 添加表备注语句
	 * @param column
	 * @return
	 */
	public String getAddTableCommentSql(String name,String comment);
	
	/**
	 * 获取检查表是否存在的sql语句
	 * @param tabName
	 * @return
	 */
	public String getExistsTableSql(String tabName);

	/**
	 * 检查列是否存在
	 * @param tabName
	 * @param colName
	 * @return
	 */
	public String getExistsColumnSql(String tabName,String colName);
	
	
	/**
	 * 
	 * 获取创建表Sql语句
	 * 
	 * @param table
	 * @return
	 */
	public String getCreateTableSql(DbTable table);
	
	/**
	 * 创建列
	 * @param taName
	 * @param column
	 * @return
	 */
	public String getCreateColumnSql(String taName, DbColumn column);
	
	/**
	 * 删除列SQL
	 * @param taName
	 * @param column
	 * @return
	 */
	public String getDeleteColumnSql(String taName, String columnName);
	/**
	 * 获取分页Sql封装
	 * @param sql
	 * @return
	 */
	public String getPageSql(String sql,int start,int limit);
	
	/**
	 * 创建索引SQL
	 * @param tableName
	 * @param dbIndex
	 * @return
	 */
	public String getCreateIndexSql(String tableName,DbIndex dbIndex);
	/**
	 * 删除索引SQL
	 * @param tableName
	 * @param indexName
	 * @return
	 */
	public String getDeleteIndexSql(String tableName,String indexName);
	
	/**
	 * 检查索引是否存在的SQL
	 * @param tableName
	 * @param indexName
	 * @return
	 */
	public String getExistsIndexSql(String tableName,String indexName);
	
}
